public class Solution {
    public int[] plusOne(int[] digits) {
        int a=1;//a表示进位值

        //判断末尾是否要进1
        if(digits[digits.length-1]<9){
            //小于1不用考虑进位直接末尾加1返回
            digits[digits.length-1]+=1;
            return digits;
        }else{
            //大于9考虑进位
            for(int i=digits.length-1;i>=0;i--){
                int sum=digits[i]+a; //计算进位后相加的和
                digits[i]=sum%10;//取该位要保存的个位数
                a=sum/10;//取要进位的十位数
            }
        }
        //进位完毕之后考虑首位是否要进位，首位进位则需要增加一位数组元素
        if(a==1){
            int[]arr=new int[digits.length+1];//需要进位创建新数组
            arr[0]=1;//将进位的数放在新数组的第一位
            int j=1;
            //将digits所有的移动到新数组
            for(int x:digits){
                arr[j++]=x;
            }
            //返回进位结果数组
            return arr;
        }
        //如果首位不用进位直接返回
        return digits;

    }
}